home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / FileManager.p < prev    next >
Text File  |  1996-05-01  |  38KB  |  927 lines

  1. {
  2.      File:        FileManager.p
  3.  
  4.      Contains:    FileManager Interface
  5.  
  6.      Version:    Technology:    System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT FileManager;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __FILEMANAGER__}
  28. {$SETC __FILEMANAGER__ := 1}
  29.  
  30. {$I+}
  31. {$SETC FileManagerIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __FILEMANAGERTYPES__}
  35. {$I FileManagerTypes.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __FILES__}
  38. {$I Files.p}
  39. {$ENDC}
  40. {$IFC UNDEFINED __FINDER__}
  41. {$I Finder.p}
  42. {$ENDC}
  43.  
  44. {$PUSH}
  45. {$ALIGN POWER}
  46. {$LibExport+}
  47.  
  48. {  You can use FileManager.h or FileManagerSPI.h, but not both  }
  49. {$IFC UNDEFINED _FILEMANAGERSPI__ }
  50. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  51. { >>>>>>>>>>>>>>>>>>>>>>>>>>>>> F o u n d a t i o n  D e f i n i t i o n s <<<<<<<<<<<<<<<<<<<<<<<<<<<<< }
  52. {
  53. ****************************************************************************
  54.     CONSTANTS & TYPES
  55. ****************************************************************************
  56. }
  57.  
  58. CONST
  59.     kFSInfoInvalidVersion        = 0;
  60.     kFSInfoD10Version            = 1;
  61.     kFSInfoD11Version            = 2;
  62.     kFSInfoCurrentReleasedVersion = 2;
  63.  
  64.  
  65. TYPE
  66.     FSInfoVersion                        = UInt32;
  67.  
  68. CONST
  69.     kFSHFSPath                    = 1;
  70.     kFSUnixPath                    = 2;
  71.     kFSDOSPath                    = 3;
  72.  
  73.  
  74. TYPE
  75.     FSPathnameType                        = UInt32;
  76.  
  77. CONST
  78.     kFSFileIsLocked                = $00000001;
  79.  
  80.  
  81. TYPE
  82.     FSFileFlags                            = OptionBits;
  83.     FSFileInformationPtr = ^FSFileInformation;
  84.     FSFileInformation = RECORD
  85.         flags:                    FSFileFlags;
  86.         finderInfo:                FInfo;
  87.         extendedFinderInfo:        FXInfo;
  88.         creationDate:            FSDate;
  89.         modificationDate:        FSDate;
  90.         dataForkSize:            FSSize;
  91.         resourceForkSize:        FSSize;
  92.     END;
  93.  
  94.  
  95. CONST
  96.     kFSFolderIsLocked            = $00000001;
  97.  
  98.  
  99. TYPE
  100.     FSFolderFlags                        = OptionBits;
  101.     FSFolderInformationPtr = ^FSFolderInformation;
  102.     FSFolderInformation = RECORD
  103.         flags:                    FSFolderFlags;
  104.         finderInfo:                DInfo;
  105.         extendedFinderInfo:        DXInfo;
  106.         creationDate:            FSDate;
  107.         modificationDate:        FSDate;
  108.     END;
  109.  
  110.  
  111. CONST
  112.     kFSVolumeIsLockedInHardware    = $00000001;
  113.     kFSVolumeIsLockedInSoftware    = $00000002;
  114.     kFSVolumeIsLockedMask        = $00000003;
  115.     kFSVolumeIsEjectable        = $00000004;
  116.     kFSVolumeIsOffline            = $00000008;
  117.     kFSVolumeIsRemote            = $00000010;
  118.  
  119.  
  120. TYPE
  121.     FSVolumeFlags                        = OptionBits;
  122.     FSVolumeInformationPtr = ^FSVolumeInformation;
  123.     FSVolumeInformation = RECORD
  124.         folderInfo:                FSFolderInformation;
  125.         flags:                    FSVolumeFlags;
  126.         totalBytes:                FSSize;
  127.         freeBytes:                FSSize;
  128.         constraints:            FSMountAccessConstraints;
  129.         capabilities:            FSVolumeCapabilities;
  130.     END;
  131.  
  132.     FSObjectInformationPtr = ^FSObjectInformation;
  133.     FSObjectInformation = RECORD
  134.         objectType:                FSObjectType;
  135.         CASE INTEGER OF
  136.         0: (
  137.             fileInfo:            FSFileInformation;
  138.             );
  139.         1: (
  140.             folderInfo:            FSFolderInformation;
  141.             );
  142.         2: (
  143.             volumeInfo:            FSVolumeInformation;
  144.             );
  145.     END;
  146.  
  147. { >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C O N T A I N E R S <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }
  148. {
  149. ****************************************************************************
  150.     OBJECTS
  151. ****************************************************************************
  152. }
  153. {
  154.     Function:    FSObjectRefClone
  155.     Purpose:    Return a copy of an FSObjectRef such that the copy also needs to be disposed.
  156.     Inputs:
  157.                 object_t        The object ref to be cloned.
  158.     Outputs:
  159.                 clone_o            Copy of object_t.
  160.     Notes:
  161.                 The value returned is the same value passed as input in object_t.  This call
  162.                 would typically be used to balance a future call to FSObjectRefDispose.  Some
  163.                 examples where it might be used:
  164.                     * A called procedure needs to save an FSObjectRef for future use, but the
  165.                       calling conventions dictate that the caller is responsible for disposing
  166.                       of the ref.  The called function could call FSObjectRefClone to make its
  167.                       copy.  The caller can safely dispose of the ref, yet the callee can use
  168.                       the ref until doing its own dispose.
  169.                     * In object-oriented programming, an object could be passed an FSObjectRef
  170.                       in its constructor.  The destructor would be expected to dispose the ref,
  171.                       but so would the routine that created the object.  FSObjectRefClone could
  172.                       be used in the constructor.
  173.                 
  174.                 The returned FSObjectRef is registered to the calling process (as must object_t).
  175. }
  176. FUNCTION FSObjectRefClone(object_t: FSObjectRef; VAR clone_o: FSObjectRef): OSStatus; C;
  177. {
  178.     Function:    FSObjectRefDispose
  179.     Purpose:    Dispose of an FSObjectRef previously returned to a process.
  180.     Inputs:
  181.                 object_t        The object ref to be disposed.
  182.     Outputs:
  183.     Notes:
  184.                 A process must dispose of all FSObjectRefs returned to it.  The FSObjectRefs
  185.                 may be returned as explicit output parameters, or as properties.  If a ref
  186.                 is returned several times for a given object, it must be disposed for each
  187.                 time it was returned.
  188.                 
  189.                 When all refs to a given object are disposed, the File Manager will dispose
  190.                 of any resources it allocated in order to operate on that object.  All refs
  191.                 for a process will be automatically disposed upon process termination.
  192.                 
  193.                 For refs returned as properties (especially when iterating over muliple
  194.                 objects), the FSObjectRefDisposeBulk call may be more convenient.
  195. }
  196. FUNCTION FSObjectRefDispose(object_t: FSObjectRef): OSStatus; C;
  197. {
  198.     Function:    FSObjectFlush
  199.     Purpose:    Flushes any data cached by the File Manager for the given object.
  200.     Inputs:
  201.                 object_t        The object to be flushed.
  202.     Outputs:
  203.     Notes:
  204.                 If object_t is a file, then any data written to that file (via a stream or backing store,
  205.                 regardless of the process that opened the stream or backing store) will be written by the
  206.                 File Manager to any underlying device.  If object_t is a volume, then any data written to
  207.                 any file on that volume will be flushed.
  208.                 
  209.                 Any change to properties of object_t will be flushed (regardless of the object's type).
  210.                 
  211.                 Data about the object (or contained in the object) may still reside in the File Manager's
  212.                 caches, but any changes will have been written out by the File Manager.  Note that the
  213.                 underlying device's driver, or the device itself, may cache some data, so the File Manager
  214.                 cannot guarantee that all data has actually been written to the underlying media.
  215.  
  216.  
  217.  
  218. }
  219. FUNCTION FSObjectFlush(object_t: FSObjectRef): OSStatus; C;
  220. {
  221.     Function:    FSObjectRefRegister
  222.     Purpose:    Allow an FSObjectRef to be used by another process.
  223.     Inputs:
  224.                 senderObject_t        The object ref.
  225.                 receiverPid_i        The other process that will be using senderObject_t.
  226.     Outputs:
  227.     Notes:
  228.                 This call allows one process to send an FSObjectRef to another process
  229.                 such that the other process can use the FSObjectRef itself.  The process
  230.                 specified by receiverPid_i must also dispose of senderObject_t.  The File
  231.                 Manager acts as if senderObject_t has been returned to receiverPid_i.
  232.  
  233.  
  234.  
  235.  
  236.  
  237.                 You might use this call if you have several processes where one process
  238.                 (typically a server of some kind) obtains FSObjectRefs for use by other
  239.                 processes (typically clients of that server).  If the other process (as
  240.                 specified by receiverPid_i) won't actually call the File Manager with
  241.                 that FSObjectRef, then it doesn't need to be registered to that process.
  242.  
  243.                 It would also be possible to have the server process make all of the
  244.                 calls to the File Manager.  FSObjectRefs could still be passed between
  245.                 client and server, but if the clients never use the refs directly, then
  246.                 there would be no need to register the refs to those clients.  (But beware:
  247.                 the server would still be responsible for disposing of all refs returned to
  248.                 it; the server would probably have some cleanup and disposal to do if one
  249.                 of its client processes were to terminate.)
  250. }
  251. FUNCTION FSObjectRefRegister(senderObject_t: FSObjectRef; receiverPid_i: KernelProcessID): OSStatus; C;
  252. {
  253. ============================================================================
  254.     Volume Sets
  255. ============================================================================
  256. }
  257. {
  258.     Function:    FSVolumeSetGetInformation
  259.     Purpose:    Returns an FSObjectRef for a Volume Set specified by an
  260.                 FSVolumeSetObjID.
  261.     Inputs:
  262.                 volumeSet_t                The volume set.
  263.     Outputs:
  264.                 object_o                Object ref for the volume set.
  265.                 includesBootVolume_o    True if the volume set includes the boot volume.
  266.     Notes:
  267.                 There is currently only one volume set.  In the future there could be others
  268.                 (perhaps file servers; perhaps to support multiple local users).
  269. }
  270. FUNCTION FSVolumeSetGetInformation(volumeSet_t: FSVolumeSetObjID; VAR includesBootVolume_o: BOOLEAN; VAR object_o: FSObjectRef): OSStatus; C;
  271. {
  272. ============================================================================
  273.     Folders
  274. ============================================================================
  275. }
  276. {
  277.     Function:    FSFolderCreate
  278.     Purpose:    Create a new named folder within a specified folder
  279.     Inputs:
  280.                 containerRef_t        The object ref of the parent of the new folder.
  281.                 folderName_i        The name of the new folder as a _persistent_ TextObject.
  282.     Outputs:
  283.                 folderRef_o            The object ref of the new folder.
  284.     Notes:
  285.                 An error will be returned if the folder already exists.
  286. }
  287. FUNCTION FSFolderCreate(containerRef_t: FSObjectRef; folderName_i: ConstFSName; VAR folderRef_o: FSObjectRef): OSStatus; C;
  288. {
  289. ============================================================================
  290.     Files
  291. ============================================================================
  292. }
  293. {
  294.     Function:    FSFileCreate
  295.     Purpose:    Create a new named file within a specified folder
  296.     Inputs:
  297.                 containerRef_t        The object ref of the parent of the new file.
  298.                 fileName_i            The name of the new file as a _persistent_ TextObject.
  299.                 fileCreator_i        The new file's Finder creator.
  300.                 fileType_i            The new file's Finder type.                
  301.     Outputs:
  302.                 fileRef_o            The object ref of the new file.
  303.     Notes:
  304.                 An error will be returned if the file already exists.
  305. }
  306. FUNCTION FSFileCreate(containerRef_t: FSObjectRef; fileName_i: ConstFSName; fileCreator_i: OSType; fileType_i: OSType; VAR fileRef_o: FSObjectRef): OSStatus; C;
  307. {
  308. ============================================================================
  309.     Folder and File Requests
  310. ============================================================================
  311. }
  312. {
  313.     Function:    FSObjectDelete
  314.     Purpose:    Deletes an object.  The FSObjectRef is NOT disposed; you must still dispose it yourself.
  315.                 Further attempts to use the ref will return errors (such as E_ObjectNotFound).
  316.  
  317.     Inputs:
  318.                 object_t        The object to be deleted.
  319.     Outputs:
  320. }
  321. FUNCTION FSObjectDelete(object_t: FSObjectRef): OSStatus; C;
  322. {
  323.     Function:    FSObjectMoveRename
  324.     Purpose:    Move a file or folder to a new folder and (optionally) rename it.
  325.     Inputs:
  326.                 sourceObjectRef_t    The object ref of the file or folder to move.
  327.                 destContainerRef_i    The object ref of the new parent folder.
  328.                 newObjectName_i        The new name for the moved file or folder (optional).
  329.     Outputs:
  330.     Notes:
  331.                 An error will be returned if another file or folder exists in the
  332.                 folder specified by destContainerRef_i which has the same name as
  333.                 sourceObjectRef_t.
  334. }
  335. FUNCTION FSObjectMoveRename(sourceObjectRef_t: FSObjectRef; destContainerRef_i: FSObjectRef; newObjectName_i: ConstFSName): OSStatus; C;
  336. {
  337.     Function:    FSObjectRename
  338.     Purpose:    Rename a file or folder.
  339.     Inputs:
  340.                 sourceObjectRef_t    The object ref of the file or folder to rename.
  341.                 newObjectName_i        The new name for the file or folder.
  342.     Outputs:
  343.     Notes:
  344.                 An error will be returned if another file or folder exists in the
  345.                 same folder as sourceObjectRef_t with the name newObjectName_i.
  346. }
  347. FUNCTION FSObjectRename(sourceObjectRef_t: FSObjectRef; newObjectName_i: ConstFSName): OSStatus; C;
  348. { >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C a p a b i l i t i e s <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }
  349. {
  350. ****************************************************************************
  351.     PROPERTY ACCESS METHODS
  352. ****************************************************************************
  353. }
  354. {
  355. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  356.     Object Property Simple Values
  357. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  358. }
  359. {
  360.     Function:    FSObjectGetOneProperty
  361.     Purpose:    Get one property attribute of an object.
  362.     Inputs:
  363.                 objectRef_t            The object ref.
  364.                 property_i            The property attribute to get.
  365.                 propertySize_i        The size of the property buffer specified
  366.                                     by propertyValue_o
  367.     Outputs:
  368.                 property_o            The requested property data.
  369.     Notes:
  370.                 This function can be used to get the value of a simple property as
  371.                 well as other attributes of all properties such as size, type,
  372.                 state, etc. The attribute to get is specified by
  373.                 property_i->attribute.
  374.                 
  375.                 Fork property values must be obtained by using the stream or mapped
  376.                 file access routines.
  377. }
  378. FUNCTION FSObjectGetOneProperty(objectRef_t: FSObjectRef; {CONST}VAR property_i: FSProperty; propertySize_i: ByteCount; property_o: LogicalAddress): OSStatus; C;
  379. {
  380.     Function:    FSObjectGetInformation
  381.     Purpose:    Get a predefined aggregate property set for an object.
  382.     Inputs:
  383.                 objectRef_t            The object ref.
  384.                 infoVersion_i        The version of the FSObjectInformation data record
  385.                                     specified by objectInfo_o.
  386.     Outputs:
  387.                 objectInfo_o        The aggregate property data (optional).
  388.                 objectName_o        The name of the specified object (optional).
  389.     Notes:
  390.                 Use kFSInfoCurrentReleasedVersion for infoVersion_i to specify the latest
  391.                 version of the FSObjectInformation record. infoVersion_i is ignored
  392.                 if objectInfo_o is omitted.
  393.                 
  394.                 objectName_o, if specified, must reference a preinitialized persistent
  395.                 TextObject of sufficient size to contain the object's name.
  396. }
  397. FUNCTION FSObjectGetInformation(objectRef_t: FSObjectRef; infoVersion_i: FSInfoVersion; VAR objectInfo_o: FSObjectInformation; objectName_o: FSName): OSStatus; C;
  398. {
  399.     Function:    FSObjectGetVolumeInformation
  400.     Purpose:    Get a predefined aggregate property set for a volume object.
  401.     Inputs:
  402.                 volumeItemRef_t        The object ref of a file or folder on the volume or
  403.                                     the volume itself.
  404.                 infoVersion_i        The version of the FSObjectInformation data record
  405.                                     specified by volumeInfo_o.
  406.     Outputs:
  407.                 volumeInfo_o        The aggregate volume property data (optional).
  408.                 volumeObjectRef_o    The object ref of the volume (optional).
  409.                 volumeName_o        The name of the volume (optional).
  410.     Notes:
  411.                 Use kFSInfoCurrentReleasedVersion for infoVersion_i to specify the latest
  412.                 version of the FSObjectInformation record. infoVersion_i is ignored
  413.                 if volumeInfo_o is omitted.
  414.                 
  415.                 volumeName_o, if specified, must reference a preinitialized persistent
  416.                 TextObject of sufficient size to contain the volume's name.
  417.                 
  418.                 This function is functionally equivalent to FSObjectGetInformation when
  419.                 the target object ref is the volume's object ref.
  420. }
  421. FUNCTION FSObjectGetVolumeInformation(volumeItemRef_t: FSObjectRef; infoVersion_i: FSInfoVersion; VAR volumeInfo_o: FSObjectInformation; VAR volumeObjectRef_o: FSObjectRef; volumeName_o: FSName): OSStatus; C;
  422. {
  423.     Function:    FSObjectSetOneProperty
  424.     Purpose:    Set one property attribute of an object.
  425.     Inputs:
  426.                 objectRef_t            The object ref.
  427.                 property_i            The property attribute to set.
  428.                 propertySize_i        The size of the property buffer specified
  429.                                     by propertyValue_i.
  430.                 propertyData_i        The new property data.
  431.     Outputs:
  432.     Notes:
  433.                 Fork property values must be changed by using the stream or mapped
  434.                 file access routines.
  435. }
  436. FUNCTION FSObjectSetOneProperty(objectRef_t: FSObjectRef; {CONST}VAR property_i: FSProperty; propertySize_i: ByteCount; propertyData_i: ConstLogicalAddress): OSStatus; C;
  437. {
  438. ============================================================================
  439.     Stream-based Access Method
  440. ============================================================================
  441. }
  442. {
  443.     Function:    FSStreamClose
  444.     Purpose:    Close a stream previously opened with FSStreamOpen or FSStreamOpenWithConstraints.
  445.     Inputs:
  446.                 stream_t            The stream to close.
  447.     Outputs:
  448.     Notes:
  449.                 Any data written to the stream is flushed (written by the File Manager) before the
  450.                 stream is closed.  The FSStreamObjID, stream_t, may no longer be used.  Any resources
  451.                 allocated by the File Manager for use by this stream will be disposed.
  452. }
  453. FUNCTION FSStreamClose(stream_t: FSStreamObjID): OSStatus; C;
  454. {
  455.     Function:    FSStreamFlush
  456.     Purpose:    Any data written to the stream will be written by the File Manager.
  457.     Inputs:
  458.                 stream_t            The stream to flush.
  459.     Outputs:
  460.     Notes:
  461.                 Stream data may still reside in the File Manager's caches, but any changes will have
  462.                 been written out by the File Manager.  Note that the underlying device's driver, or
  463.                 the device itself, may cache some data, so the File Manager cannot guarantee that
  464.                 all data has actually been written to the underlying media.
  465.                 
  466.                 Other information about the object (such as its modification date) might not be flushed
  467.                 by this call, though any volume-level data needed to access the stream will be.
  468.  
  469.  
  470. }
  471. FUNCTION FSStreamFlush(stream_t: FSStreamObjID): OSStatus; C;
  472. {
  473.     Function:    FSStreamGetAbsoluteEOF
  474.     Purpose:    Get the logical end-of-file of an open file fork.
  475.     Inputs:
  476.                 stream_t            The target stream.
  477.     Outputs:
  478.                 currentEOF_o        The logical end-of-file of the specified
  479.                                     stream.
  480.     Notes:
  481. }
  482. FUNCTION FSStreamGetAbsoluteEOF(stream_t: FSStreamObjID; VAR currentEOF_o: FSOffset): OSStatus; C;
  483. {
  484.     Function:    FSStreamGetMark
  485.     Purpose:    Returns the current mark (position offset) for a stream.
  486.     Inputs:
  487.                 stream_t            The stream.
  488.     Outputs:
  489.                 currentMark_o        Current offset in the stream, stream_t.
  490.     Notes:
  491.                 This call returns the offset from the start of the file that would be
  492.                 equivalent to using a FSForkPositionDescriptor whose positionOffset is
  493.                 0, and whose positionMode is kFSFromMark.  A stream's mark is set to
  494.                 the byte following the last read or write, or via FSStreamSetMark.
  495. }
  496. FUNCTION FSStreamGetMark(stream_t: FSStreamObjID; VAR currentMark_o: FSOffset): OSStatus; C;
  497. {
  498.     Function:    FSStreamOpen
  499.     Purpose:    Open a file fork for stream access.
  500.     Inputs:
  501.                 fileObjectRef_t        The object ref of the file to open.
  502.                 fork_i                The fork to open.
  503.     Outputs:
  504.                 stream_o            The new stream ID.
  505.     Notes:
  506.                 The only allowable values for fork_i are kFSDataFork and
  507.                 kFSResourceFork.
  508.                 
  509.                 FSStreamOpen attempts to open the fork with exclusive read/write
  510.                 access. If the file is locked or is open on another stream with
  511.                 conflicting access constraints, then an error is returned. Use
  512.                 FSStreamOpenWithConstraints() to specify particular access
  513.                 constratins.
  514. }
  515. FUNCTION FSStreamOpen(fileObjectRef_i: FSObjectRef; fork_i: FSForkType; VAR stream_o: FSStreamObjID): OSStatus; C;
  516. {
  517.     Function:    FSStreamSetAbsoluteEOF
  518.     Purpose:    Set the logical end-of-file of an open file fork.
  519.     Inputs:
  520.                 stream_t            The target stream.
  521.                 eof_i                The new logical end-of-file of the stream.
  522.     Outputs:
  523.     Notes:
  524.                 If there is not enough space on the volume to set the EOF of
  525.                 the fork specified by stream_t to eof_i, then the EOF is not
  526.                 changed and an error is returned.
  527. }
  528. FUNCTION FSStreamSetAbsoluteEOF(stream_t: FSStreamObjID; {CONST}VAR eof_i: FSOffset): OSStatus; C;
  529. {
  530.     Function:    FSStreamSetMark
  531.     Purpose:    Sets the current mark (position offset) for a stream.
  532.     Inputs:
  533.                 stream_t            The stream.
  534.                 newPosition_i        The new position of the stream's mark.
  535.                 options_i
  536.     Outputs:
  537.                 originalMark_o        The stream's mark, before being changed (relative
  538.                                     to the start of the stream).
  539.                 currentMark_o        The new mark, relative to the start of the stream.
  540.     Notes:
  541.                 A stream's mark is usually used for sequential access to a stream,
  542.                 or to position relative to the ending position of the last operation
  543.                 on a stream.  This call lets you explicitly set the mark for future
  544.                 operations that will operate relative to the current mark.
  545.                 
  546.                 If kFSMarkPinToEOF is set in options_i, and the new position specified
  547.                 by newPosition_i would exceed the current end of the stream (also known
  548.                 as End Of File or EOF), then the mark will be set to the EOF and E_NoError
  549.                 is returned.  Otherwise, an error will returned.  The mark may never be
  550.                 set past the end of the stream.
  551.  
  552.  
  553. }
  554. FUNCTION FSStreamSetMark(stream_t: FSStreamObjID; {CONST}VAR newPosition_i: FSForkPositionDescriptor; options_i: FSStreamSetMarkOptions; VAR originalMark_o: FSOffset; VAR currentMark_o: FSOffset): OSStatus; C;
  555. {
  556.     Function:    FSStreamSimpleRead
  557.     Purpose:    Read data from an open stream.
  558.     Inputs:
  559.                 stream_t            The target stream.
  560.                 requestLength_i        The number of bytes to read from the fork.
  561.                 position_i            The starting position for the read operation
  562.                 
  563.     Outputs:
  564.                 data_o                The address of a buffer to the read bytes.
  565.                 actualLength_o        The actual number of bytes read from the file (optional).
  566.                 currentMark_o        The mark position within the stream after the
  567.                                     read operation (optional)
  568.     Notes:            
  569.                 The stream mark is always positioned after the last byte read after all
  570.                 calls to FSStreamSimpleRead().
  571.  
  572.                 If an attempt is made to read beyond the logical EOF of the fork, then
  573.                 the mark is set at the logical EOF of the file, actualLength_o contains
  574.                 the actual number of bytes read, and an error is returned.
  575. }
  576. FUNCTION FSStreamSimpleRead(stream_t: FSStreamObjID; requestLength_i: ByteCount; {CONST}VAR position_i: FSForkPositionDescriptor; data_o: LogicalAddress; VAR actualLength_o: ByteCount; VAR currentMark_o: FSOffset): OSStatus; C;
  577. {
  578.     Function:    FSStreamSimpleWrite
  579.     Purpose:    Write data to an open stream.
  580.     Inputs:
  581.                 stream_t            The target stream.
  582.                 requestLength_i        The number of bytes to write to the fork.
  583.                 data_i                The address of a buffer contating the data to write.
  584.                 position_i            The starting position for the write operation
  585.                 
  586.     Outputs:
  587.                 actualLength_o        The actual number of bytes written to the file (optional).
  588.                 currentMark_o        The mark position within the stream after the
  589.                                     read operation (optional)
  590.     Notes:            
  591.                 The stream mark is always positioned after the last byte written after all
  592.                 calls to FSStreamSimpleWrite().
  593.  
  594.                 If an attempt is made to write beyond the logical EOF of the fork, then
  595.                 the EOF is moved to the byte following the last written byte.
  596. }
  597. FUNCTION FSStreamSimpleWrite(stream_t: FSStreamObjID; requestLength_i: ByteCount; data_i: ConstLogicalAddress; {CONST}VAR position_i: FSForkPositionDescriptor; VAR actualLength_o: ByteCount; VAR currentMark_o: FSOffset): OSStatus; C;
  598. {
  599. ============================================================================
  600.     Memory-mapped Access Method(Backing Store Requests)
  601. ============================================================================
  602. }
  603. {
  604.     Function:    FSMappedFileClose
  605.     Purpose:    Closes an access path to a file used for backing store.
  606.     Inputs:
  607.                 backingStore_t        The backing store object.
  608.     Outputs:
  609.     Notes:
  610.                 Basically the same as FSStreamClose, but for a backing store.
  611.                 
  612.                 All data written to this backing store (by writing to pages backed by
  613.                 this store) will be flushed (written) by the File Manager.
  614. }
  615. FUNCTION FSMappedFileClose(backingStore_t: FSBackingStoreObjID): OSStatus; C;
  616. {
  617.     Function:    FSMappedFileFlush
  618.     Purpose:    Any data written via the backing store will be written by the File Manager.
  619.     Inputs:
  620.                 backingStore_t        The backing store to flush.
  621.     Outputs:
  622.     Notes:
  623.                 Data may still reside in the File Manager's caches, but any changes will have been
  624.                 written out by the File Manager.  Note that the underlying device's driver, or the
  625.                 device itself, may cache some data, so the File Manager cannot guarantee that all
  626.                 data has actually been written to the underlying media.
  627.                 
  628.                 Other information about the object (such as its modification date) might not be flushed
  629.                 by this call, though any volume-level data needed to access the fork data will be.
  630. }
  631. FUNCTION FSMappedFileFlush(backingStore_t: FSBackingStoreObjID): OSStatus; C;
  632. {
  633.     Function:    FSMappedFileGetAbsoluteEOF
  634.     Purpose:    Return the EOF (length) of the fork being accessed by the given backing store.
  635.     Inputs:
  636.                 backingStore_t        The backing store used to access the fork.
  637.     Outputs:
  638.                 currentEOF_o        The size, in bytes, of the fork.
  639.     Notes:
  640.                 Since access to a fork via a backing store (i.e. memory mapped file access) is
  641.                 accomplished by directly accessing memory pages, the virtual memory system must
  642.                 read and write entire pages.  If the last page is modified, the entire page is
  643.                 written, resulting in the fork size being rounded up to a multiple of a page size.
  644.                 Similarly for access to pages beyond the fork's EOF.
  645.                 
  646.                 This call returns the current EOF (length) of the underlying fork.  This may be
  647.                 set implicitly by writing to backed pages, or by using the FSMappedFileSetEOF
  648.                 call.  It may also be changed by streams opened to the same fork.
  649. }
  650. FUNCTION FSMappedFileGetAbsoluteEOF(backingStore_t: FSBackingStoreObjID; VAR currentEOF_0: FSOffset): OSStatus; C;
  651. {
  652.     Function:    FSMappedFileOpen
  653.     Purpose:    Open a file fork for memory mapped access.
  654.     Inputs:
  655.                 fileObjectRef_t        The object ref of the file to open.
  656.                 fork_i                The fork to open.
  657.     Outputs:
  658.                 backingStore_o        The backing store used to access the fork.
  659.     Notes:
  660.                 The only allowable values for fork_i are kFSDataFork and
  661.                 kFSResourceFork.
  662.                 
  663.                 FSMappedFileOpen attempts to open the fork with exclusive read/write
  664.                 access. If the file is locked or is open on another stream with
  665.                 conflicting access constraints, then an error is returned. Use
  666.                 FSMappedFileOpenWithConstraints() to specify particular access
  667.                 constratins.
  668. }
  669. FUNCTION FSMappedFileOpen(fileObjectRef_t: FSObjectRef; fork_i: FSForkType; VAR backingStore_o: FSBackingStoreObjID): OSStatus; C;
  670. {
  671.     Function:    FSMappedFileSetAbsoluteEOF
  672.     Purpose:    Sets the EOF (length) of the fork being accessed by the given backing store.
  673.     Inputs:
  674.                 backingStore_t        The backing store used to access the fork.
  675.                 eof_i                The new length (EOF) of the fork.
  676.     Outputs:
  677.                 currentEOF_o        The new size, in bytes, of the fork.
  678.     Notes:
  679.                 Since access to a fork via a backing store (i.e. memory mapped file access) is
  680.                 accomplished by directly accessing memory pages, the virtual memory system must
  681.                 read and write entire pages.  If the last page is modified, the entire page is
  682.                 written, resulting in the fork size being rounded up to a multiple of a page size.
  683.                 Similarly for access to pages beyond the fork's EOF.
  684.                 
  685.                 This call allows the EOF to be explicitly set for a fork being accessed via a
  686.                 backing store.  Any data beyond the EOF will not actually be written to the fork.
  687.                 The File Manager has no way to detect whether access to pages occurs beyond the
  688.                 EOF; it is a programming error to access bytes beyond the EOF via a backing store.
  689.                 
  690.                 This call would typically be used when a fork has been memory mapped to enable
  691.                 convenient access to a file's data structures as if it were completely in memory.
  692.                 You would make all changes to the data structures, then use this call to indicate
  693.                 the number of bytes that are valid and should be written to the fork.
  694. }
  695. FUNCTION FSMappedFileSetAbsoluteEOF(backingStore_t: FSBackingStoreObjID; {CONST}VAR eof_i: FSOffset; VAR currentEOF_o: FSOffset): OSStatus; C;
  696. {
  697. ****************************************************************************
  698.     NAVIGATION & ENUMERATION
  699. ****************************************************************************
  700. }
  701. {
  702. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  703.     Object Iteration
  704. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  705. }
  706. {
  707.     Function:    FSObjectIterateOnce
  708.     Purpose:    Iterate to the next object in the current container and get
  709.                 aggregate property information.
  710.     Inputs:
  711.                 iterator_t                The object iterator.
  712.                 objectInfoVersion_i        The version of the FSObjectInformation data record
  713.                                         specified by objectInfo_o.
  714.     Outputs:
  715.                 objectInfo_o            Aggregate property information about the current
  716.                                         iterator object (optional).
  717.                 objectRef_o                The object ref of the current iterator object (optional).
  718.                 objectName_o            The name of the current iterator object (optional).
  719.     Notes:
  720.                 Use kFSInfoCurrentReleasedVersion for infoVersion_i to specify the latest
  721.                 version of the FSObjectInformation record. infoVersion_i is ignored
  722.                 if objectInfo_o is omitted.
  723.                 
  724.                 objectName_o, if specified, must reference a preinitialized persistent
  725.                 TextObject of sufficient size to contain the object's name.
  726.  
  727.                 If the iterator has reached the end of it's current container, then an
  728.                 exception will be returned.
  729. }
  730. FUNCTION FSObjectIterateOnce(iterator_t: FSObjectIteratorObjID; objectInfoVersion_i: FSInfoVersion; VAR objectInfo_o: FSObjectInformation; VAR objectRef_o: FSObjectRef; objectName_o: FSName): OSStatus; C;
  731. {
  732.     Function:    FSObjectIteratorChangeCurrentScope
  733.     Purpose:    Move an object iterator into or out of a container.
  734.     Inputs:
  735.                 iterator_t        The object iterator.
  736.                 movement_i        The direction to move: into or out of a container.
  737.     Outputs:
  738.     Notes:
  739.                 If movement_i is kFSObjectEnter, then the iterator must be positioned on
  740.                 an object that is capable of containing other objects; it does not need to
  741.                 actually contain any objects at that time.  That object will become the new
  742.                 current scope of the iterator and it will be in Start Of Iteration state
  743.                 (meaning that all objects in the current scope have yet to be returned).
  744.                 The iterator will not be positioned on any object.
  745.                 
  746.                 If movement_i is kFSObjectExit,  then the current scope will become the object
  747.                 that contains the current scope; the iterator's new position will be the object
  748.                 that was the current scope.  If the current scope and the outermost scope were
  749.                 the same, then the outermost scope will also change to the new current scope and
  750.                 E_ExitIteratorScope is returned (so that you realize you will be iterating outside
  751.                 of the scope that you used to create the iterator; the iterator remains usable).
  752.                 
  753.                 Object iterators keep track of all of the objects between the outermost scope and
  754.                 the current scope (this is known as the "scope stack").  If any object in the scope
  755.                 stack is moved, the iterator is invalidated and will return the error
  756.                 E_IteratorScopeException until it has been explicitly fixed (by FSObjectIteratorRecreate)
  757.                 or disposed.  This call adds or removes objects from the scope stack.
  758. }
  759. FUNCTION FSObjectIteratorChangeCurrentScope(iterator_t: FSObjectIteratorObjID; movement_i: FSObjectIteratorMovement): OSStatus; C;
  760. {
  761.     Function:    FSObjectIteratorCreate
  762.     Purpose:    Create an iterator for iterating over objects.
  763.     Inputs:
  764.                 outermostScope_t        The initial outermost scope and current scope.
  765.                 options_i                Controls whether the iterator will traverse objects in
  766.                                         a single container or all embedded (nested) containers.
  767.                                         Also controls which kinds of objects will be returned.
  768.     Outputs:
  769.                 iterator_o                The object iterator.
  770.     Notes:
  771.                 The outermost scope and current scope of the iterator are set to outermostScope_t.
  772.                 The iterator is not positioned on any object, though it is inside outermostScope_t.
  773.                 OutermostScope_t must be an object capable of containing other objects (such as the
  774.                 Universe, a volume set, a volume, or a folder).  The iterator is put into "Start Of
  775.                 Iteration" state, meaning that all objects in the current scope have yet to be
  776.                 returned.
  777.                 
  778.                 The File Manager allocates resources and maintains state for every iterator.  When
  779.                 you have finished using an iterator, you should call FSObjectIteratorDispose to dispose
  780.                 of it.
  781. }
  782. FUNCTION FSObjectIteratorCreate(outermostScope_t: FSObjectRef; options_i: FSObjectIteratorCreationOptions; VAR iterator_o: FSObjectIteratorObjID): OSStatus; C;
  783. {
  784.     Function:    FSObjectIteratorDispose
  785.     Purpose:    Dispose of an object iterator.
  786.     Inputs:
  787.                 iterator_t        The object iterator.
  788.     Outputs:
  789.     Notes:
  790.                 The File Manager will dispose of the iterator and release any resources
  791.                 allocated to the iterator.  Further attempts to use the iterator will result
  792.                 in an error.
  793.  
  794.  
  795. }
  796. FUNCTION FSObjectIteratorDispose(iterator_t: FSObjectIteratorObjID): OSStatus; C;
  797. {
  798.     Function:    FSObjectIteratorRestart
  799.     Purpose:    Place an object iterator in the Start Of Iterator state, in its current scope.
  800.     Inputs:
  801.                 iterator_t        The object iterator.
  802.     Outputs:
  803.     Notes:
  804.                 The iterator is not positioned on any object.  The iterator is put into "Start Of
  805.                 Iteration" state, meaning that all objects in the current scope have yet to be
  806.                 returned.
  807.                 
  808.                 You would use this call to completely restart iteration within the current scope,
  809.                 ignoring any state about objects previously returned in the current scope.  The
  810.                 outermost scope is not affected.  State information about which objects have been
  811.                 returned from scopes outside the current scope is unchanged.
  812. }
  813. FUNCTION FSObjectIteratorRestart(iterator_t: FSObjectIteratorObjID): OSStatus; C;
  814. {
  815. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  816.     Object Resolution
  817. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  818. }
  819. {
  820.     Function:    FSObjectCreateRef
  821.     Purpose:    Get the object ref for a named object in a given container.
  822.     Inputs:
  823.                 container_i                The object container ref.
  824.                 objectName_i            The name of the target object.
  825.     Outputs:
  826.                 objectRef_o                The resulting object ref.
  827.     Notes:
  828. }
  829. FUNCTION FSObjectCreateRef(container_i: FSObjectRef; objectName_i: ConstFSName; VAR objectRef_o: FSObjectRef): OSStatus; C;
  830. {
  831.     Function:    FSObjectExchange
  832.     Purpose:    Exchange the properties of two objects.  Typically used for "safe
  833.                 saving", while maintaining an object's persistent reference.
  834.     Inputs:
  835.                 object1_i        One object.
  836.                 object2_i        The object to exchange it with.
  837.     Outputs:
  838.     Notes:
  839.                 This call is used to allow a "safe save" that preserves an object's
  840.                 persistent reference.  For example, you might want to save an updated
  841.                 set of properties to an object so that any errors while saving result
  842.                 in the object being unchanged; but, you also want the object's persistent
  843.                 reference to remain unchanged (so that things like aliases still work).
  844.                 
  845.                 What you would do is create a second object somewhere (in a temporary
  846.                 folder, for example).  Write out all of the properties, both unchanged
  847.                 and changed, to the second object.  When done saving, you would call
  848.                 FSObjectExchange with both objects; the contents of the two objects get
  849.                 swapped in such a way that the original object has the new properties,
  850.                 but retains its old persistent reference.
  851.  
  852.  
  853. }
  854. FUNCTION FSObjectExchange(object1_i: FSObjectRef; object2_i: FSObjectRef): OSStatus; C;
  855. {
  856.     Function:    FSObjectGetContainerRef
  857.     Purpose:    Get the object ref for the container of a given object.
  858.     Inputs:
  859.                 objectRef_i                The object of interest.
  860.     Outputs:
  861.                 containerRef_o            The object ref of the container of
  862.                                         containerRef_o.
  863.     Notes:
  864. }
  865. FUNCTION FSObjectGetContainerRef(objectRef_i: FSObjectRef; VAR containerRef_o: FSObjectRef): OSStatus; C;
  866. {
  867.     Function:    FSObjectRefGetFSSpec
  868.     Purpose:    Return an FSSpec for an object (suitable for use with the Files API).
  869.     Inputs:
  870.                 object_t            The object.
  871.     Outputs:
  872.                 fSSpec_o            An FSSpec that specifies the same object as object_t,
  873.                                     suitable for use with the Files API.
  874.     Notes:
  875.                 This call is intended to be used by code that is required to use both the
  876.                 Files API and the FileManager API (or has clients that use both APIs).
  877.                 For example, a piece of code may already exist with an API that uses FSSpecs,
  878.                 but has been converted internally to use the FSObjectRefs; it would use this
  879.                 call to produce an FSSpec as an output for the pre-existing API.
  880.                 
  881.                 It would be best to provide an API that allows its clients to use FSObjectRefs.
  882. }
  883. FUNCTION FSObjectRefGetFSSpec(object_t: FSObjectRef; VAR fSSpec_o: FSSpec): OSStatus; C;
  884. {  }
  885. FUNCTION FSPathnameResolve(container_i: FSObjectRef; path_i: ConstCStringPtr; pathLength_i: ByteCount; pathType_i: FSPathnameType; VAR objectRef_o: FSObjectRef): OSStatus; C;
  886. {
  887.     Function:    FSSpecGetFSObjectRef
  888.     Purpose:    Return an FSObjectRef for an object specified via an FSSpec.
  889.     Inputs:
  890.                 theFSSpec_t            An FSSpec for the object.
  891.     Outputs:
  892.                 theObject_o            An FSObjectRef for the object.
  893.     Notes:
  894.                 This call is intended to be used by code that is required to use both the
  895.                 Files API and the FileManager API (or has clients that use both APIs).
  896.                 For example, a piece of code may already exist with an API that uses FSSpecs,
  897.                 but has been converted internally to use the FSObjectRefs; it would use this
  898.                 call to take an input FSSpec and convert it to an FSObjectRef to use internally;
  899.                 the FSObjectRef would then be disposed before completing the call.
  900.                 
  901.                 It would be best to provide an API that allows its clients to use FSObjectRefs.
  902. }
  903. FUNCTION FSSpecGetFSObjectRef({CONST}VAR theFSSpec_t: FSSpec; VAR theObject_o: FSObjectRef): OSStatus; C;
  904. {
  905.     Function:    FSVolumeGetInformation
  906.     Purpose:    Get the volume object ref for a given volume object ID.
  907.     Inputs:
  908.                 volume_t        The volume's object ID.
  909.     Outputs:
  910.                 object_o        The volume's object ref.
  911.     Notes:
  912. }
  913. FUNCTION FSVolumeGetInformation(volume_t: FSVolumeObjID; VAR object_o: FSObjectRef): OSStatus; C;
  914. FUNCTION FSObjectGetOnePropertySize(objectRef_t: FSObjectRef; {CONST}VAR property_i: FSProperty; VAR propertySize_o: FSSize): OSStatus; C;
  915. {$ENDC}
  916. {$ENDC}
  917. {$ALIGN RESET}
  918. {$POP}
  919.  
  920. {$SETC UsingIncludes := FileManagerIncludes}
  921.  
  922. {$ENDC} {__FILEMANAGER__}
  923.  
  924. {$IFC NOT UsingIncludes}
  925.  END.
  926. {$ENDC}
  927.